package org.soderiakelvy.controller.producto;


import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;


import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.controller.util.Validar;
import org.soderiakelvy.model.domain.PackVO;
import org.soderiakelvy.model.service.ProductoServicio;
import org.soderiakelvy.model.service.imp.ProductoServicioImp;

@ViewScoped
@ManagedBean
public class PackCreate {
	private ProductoServicio servicio = new ProductoServicioImp();
	private PackVO pack = new PackVO();
	
	private boolean nombreValido=false;
	private boolean cantidadValido=false;
	private boolean precioPackValido=false;
	private boolean precioBidonValido = false;
	private boolean productoValido=false;
	
	private String cantidad;
	private String precioPack;
	private String precioBidon;
	private String precioProducto;
	
	private String deshabilitarGuardar = "true";
	

	public PackCreate(){
		System.out.println("Constructor de Pack Create Pabloxp");
	}
	
	public String guardarPack(PackVO pack){
		pack.setNombre(pack.getNombre().toUpperCase());
		pack.setProducto(servicio.getProductoById(pack.getProducto().getProductoId()));
		servicio.insertPackVO(pack);
		return Constante.URL_PACK_LIST;
	}
	
	public String cancelar(){
		return Constante.URL_PACK_LIST;
	}
	
	// -------------Validaciones-----------------
	public void listenerNombre(){
		if (this.pack.getNombre().isEmpty()||this.pack.getNombre() ==null){
			this.deshabilitarGuardar = "true";
			this.nombreValido = false;
			FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre del Pack no puede ser Vacio", "para continuar "));
		}else{
			if (servicio.existeNombrePack(this.pack.getNombre().toUpperCase())){
				FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre de Pack Existe", "para continuar "));
				this.deshabilitarGuardar = "true";  
				this.nombreValido = false;
			}else{ 
				this.nombreValido = true;
				if (this.cantidadValido  && this.precioPackValido && this.productoValido && this.precioBidonValido) {
					this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
				}
			}	
		}
	}
	
	public void listenerCantidad(){
		if (Validar.isNumeroEntero(this.cantidad)){
			pack.setCantidad(Integer.parseInt(this.cantidad));
			if ((pack.getCantidad() > 0) ){
				this.cantidadValido = true;
				if (this.nombreValido && this.precioPackValido && this.precioBidonValido && this.productoValido){
					this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
					System.out.println("HABILITO GUARDAR  en Cantidad");
				}	
			}else{ 
				this.deshabilitarGuardar = "true";
				this.cantidadValido = false;
				FacesContext.getCurrentInstance().addMessage("form1::errorCantidad", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"La Cantidad debe mayor que 0", "para continuar "));
			}
		}else{
			FacesContext.getCurrentInstance().addMessage("form1::errorCantidad", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"La Cantidad debe ser un numero", "para continuar "));
			this.deshabilitarGuardar = "true";
			this.cantidadValido = false;
		}
	}
	
	public void listenerPrecioPack(){
		if (Validar.isNumeroFloat(this.precioPack)){
			pack.setPrecioPack(Float.parseFloat(this.precioPack));
			if ((pack.getPrecioPack() > 0)){
				this.precioPackValido = true;
				if (this.nombreValido && this.cantidadValido && this.precioBidonValido && this.productoValido){
					this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
					System.out.println("HABILITO GUARDAR  en precio Pack");
				}	
			}else{ 
				this.deshabilitarGuardar = "true";
				this.precioPackValido = false;
				FacesContext.getCurrentInstance().addMessage("form1::errorPrecioPack", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Precio del Pack debe mayor que 0 ", "para continuar "));
			}
		}else{
			FacesContext.getCurrentInstance().addMessage("form1::errorPrecioPack", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Precio del Pack debe ser un numero", "para continuar "));
			this.deshabilitarGuardar = "true";
			this.precioPackValido = false;
		}
	}
	
	public void listenerPrecioBidon(){
		if (Validar.isNumeroFloat(this.precioBidon)){
			pack.setPrecioBidon(Float.parseFloat(this.precioBidon));
			if ((pack.getPrecioBidon() > 0)){
				this.precioBidonValido = true;
				if (this.nombreValido && this.cantidadValido && this.precioPackValido && this.productoValido){
					this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
					System.out.println("HABILITO GUARDAR  en precio Pack");
				}	
			}else{ 
				this.deshabilitarGuardar = "true";
				this.precioBidonValido = false;
				FacesContext.getCurrentInstance().addMessage("form1::errorPrecioBidon", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Precio del Pack debe mayor que 0 ", "para continuar "));
			}
		}else{
			FacesContext.getCurrentInstance().addMessage("form1::errorPrecioBidon", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Precio del Pack debe ser un numero", "para continuar "));
			this.deshabilitarGuardar = "true";
			this.precioBidonValido = false;
		}
	}
	
	public void listenerProducto(){
		if (pack.getProducto().getProductoId() > 0){
			this.productoValido = true;
			if (this.nombreValido && this.cantidadValido && this.precioPackValido && this.precioBidonValido) {
				this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
				System.out.println("HABILITO GUARDAR  en producto");
			}	
		}else{ 
			this.deshabilitarGuardar = "true";
			this.productoValido = false;
			FacesContext.getCurrentInstance().addMessage("form::errorProducto", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"Debe Seleccionar un Producto", "para continuar "));
		}
	}
	
	// -------------------------------------------
	
	//TODO Get and Set
	public PackVO getPack() {
		return pack;
	}

	public void setPack(PackVO pack) {
		this.pack = pack;
	}

	public boolean isNombreValido() {
		return nombreValido;
	}

	public void setNombreValido(boolean nombreValido) {
		this.nombreValido = nombreValido;
	}

	public String getCantidad() {
		return cantidad;
	}

	public void setCantidad(String cantidad) {
		this.cantidad = cantidad;
	}

	public String getPrecioPack() {
		return precioPack;
	}

	public void setPrecioPack(String precioPack) {
		this.precioPack = precioPack;
	}

	public String getPrecioProducto() {
		return precioProducto;
	}

	public void setPrecioProducto(String precioProducto) {
		this.precioProducto = precioProducto;
	}

	public String getDeshabilitarGuardar() {
		return deshabilitarGuardar;
	}

	public void setDeshabilitarGuardar(String deshabilitarGuardar) {
		this.deshabilitarGuardar = deshabilitarGuardar;
	}

	public String getPrecioBidon() {
		return precioBidon;
	}

	public void setPrecioBidon(String precioBidon) {
		this.precioBidon = precioBidon;
	}
}
